/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.servicoimpl;

import br.com.deployment.entidade.acesso.Usuario;
import br.com.deployment.entidade.fermojupi.AtoItem;
import br.com.deployment.entidade.selo.DetalheEntradaSelo;
import br.com.deployment.entidade.selo.Distribuicao;
import br.com.deployment.entidade.selo.Selo;
import br.com.deployment.entidade.selo.TipoSelo;
import br.com.deployment.enums.Relatorio;
import br.com.deployment.interfaces.SeloDaoIn;
import br.com.deployment.servico.CartorioServico;
import br.com.deployment.servico.SeloServico;
import br.com.deployment.servico.UsuarioServico;
import br.com.deployment.utilitario.GeraRelatorio;
import br.com.deployment.utilitario.Msg;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.faces.context.FacesContext;

/**
 *
 * @author roniere
 */
@Stateless
@LocalBean
public class SeloServicoImpl implements SeloServico{
    
    @EJB
    SeloDaoIn seloDao;
    
    @EJB
    UsuarioServico usuarioServico;
    
    @EJB
    CartorioServico cartorioServico;
    
    private Usuario usr;
    
    
    @Override
    public void create(Selo selo) {
       try{
           seloDao.save(selo); 
       }catch(Exception erro){
           Msg.messagemError("falha ao completar esta transação");   
       }    
    }

    @Override
    public void edit(Selo selo) {
         try{
           seloDao.update(selo); 
       }catch(Exception erro){
           Msg.messagemError("falha ao completar esta transação");   
       }   
    }

    @Override
    public void editSelos(List<Selo> selos) {
         seloDao.editSelos(selos);
    }

    @Override
    public void remove(Selo selo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void cancelar(List<Selo> s) {
        seloDao.cancelar(s);
    }

    @Override
    public Selo find(int id) {
        return seloDao.find(id);
    }

    @Override
    public Selo findNumeracao(int numeracao, int serie) {
        return seloDao.findNumeracao(numeracao, serie);
    }

    @Override
    public List<Selo> findAll() {
        return seloDao.findAll();
    }

    @Override
    public boolean exist(Selo se, boolean msg) {
        return seloDao.exist(se, msg);
    }
    
    

    @Override
    public Selo findSelo(int numeracao, String serie, TipoSelo tipoSelo) {
        return seloDao.findSelo(numeracao, serie, tipoSelo);
    }

    @Override
    public Long qtdSelo(Usuario u, TipoSelo tSelo) {
        return seloDao.qtdSelo(u, tSelo);
    }

    @Override
    public Long qtdSeloAll(TipoSelo tSelo) {
        return seloDao.qtdSeloAll(tSelo);
    }

    @Override
    public Long qtdSeloDistribuido(TipoSelo tSelo) {
        return seloDao.qtdSeloDistribuido(tSelo);
    }

    @Override
    public Long qtdSeloSairam(TipoSelo tSelo) {
        return seloDao.qtdSeloSairam(tSelo);
    }

    @Override
    public Long qtdSeloCancelado(TipoSelo tSelo) {
        return seloDao.qtdSeloCancelado(tSelo);
    }

    @Override
    public Long qtdSeloSairamMes(Date dataIni, Date dataFim) {
        return seloDao.qtdSeloSairamMes(dataIni, dataFim);
    }

    @Override
    public boolean existSeloEditar(int numeracao, String serie, TipoSelo tipoSelo, int detalhe) {
        return seloDao.existSeloEditar(numeracao, serie, tipoSelo,detalhe);
    }
    
    @Override
    public void removeSelos(DetalheEntradaSelo es){
        seloDao.removeSelos(es);
    }
    
       @Override
    public Selo findSeloUsr(Selo selo) {
        return seloDao.findSeloUsr(selo.getNumero(), selo.getSerie(), selo.getTipoSelo(), getUsr());
    }
       
     public Usuario getUsr(){
         return usuarioServico.verificarUsuarioNome(FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal().getName());
     }
    
    @Override
     public void seloNaoUsado(Selo s, TipoSelo ts, Date dataIni, Date dataFim, Distribuicao d, Integer numIni, Integer numFim){
        seloDao.seloNaoUsado(s, ts, dataIni, dataFim, d, numIni, numFim);
     }
     
    
    @Override
    public List<Selo> selosByUsuarioByAto(AtoItem atoItem, Usuario usr, List<Selo> notSelos){
        return seloDao.selosByUsuarioByAto(atoItem, usr, notSelos);
    }
}
